home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1996 April
/
CHIP 1996 aprilis (CD06).zip
/
CHIP_CD06.ISO
/
hypertxt.arj
/
9306
/
POLIMORF.CD
< prev
next >
Wrap
Text File
|
1995-04-16
|
21KB
|
390 lines
@VPolimorf vírusok@N
@Vùt a Mutation Engine-ig@N
A hivatásos vírusírók túl vannak már ezernyi gonosztevô
kifejlesztésén, rengeteg terjedési módszert dolgoztak ki.
Rutinmunkává vált egy átlagos vírus elkészítése, így új
kihívások után kellett nézniük. Megszületett a biológiából
régóta ismert alakváltoztató vírusok számítógépes
megfelelôje is.
Az elsô vírusok valójában nagyon egyszerûek voltak. Az
ismert receptek alapján ugyanis sokan kifejlesztettek
terjedésre alkalmas programokat. Ehhez kis kivétellel az
Assembly nyelvet választották, amelyben tömör kód írható.
Ez rögtön meghatározta az ellenük elkészített programok
filozófiáját is: megjelentek a szekvenciakeresôk, amelyek a
szövegkeresôkhöz hasonlóan mûködnek. Ha egy szövegkeresô
programmal például az ""ìrás" szót kutatjuk, hamarosan
rálelhetünk, hacsak annak idején nem azt írtuk helyette --
egy másik ékezetesítô programocskával --, hogy ""îrás". A
szó jelentése nem változott, de az eltérô ASCII kódok miatt
a szövegkeresô nem sokat segít rajtunk. Ez a probléma
meghatározó azon víruskeresôk számára is, amelyek nem
szöveget, hanem az adott vírusra jellemzô gépikódú
programrészeket keresnek. Elég egy jól irányzott
módosítás, és az addig ismert vírusból egy ""új"
keletkezik, majd kezdôdhet a vírus/szekvencia játék
elölrôl.
A vírusírók eleinte csak titkosítási szándékkal láttak neki
olyan módszerek kifejlesztéséhez, amelyek képesek voltak
kódolni a vírustest bizonyos területeit. Erre akkor van
például szükségük, ha a kiagyalt vírus epés üzeneteket is
tartalmaz -- hiszen egy file-nézegetô is elegendô lehetne a
lebuktatásához. Ilyen jól látható üzenet van például a
@VPif-Paf B@N vírus végén.
@VCascade@N
A kódolást alkalmazó vírusok elsô közismert darabja a
Cascade (Potyogós) volt. Ez egy kikódoló ciklussal kezdôdik
(lásd a mellékelt 1-es listát). Mire a vezérlés a
VIRUSTEST-hez érkezik, már megfelelôen értelmezhetô gépi
utasításokra talál a processzor. A XOR utasítás közkedvelt
eleme a legtöbb titkosító algoritmusnak. Jelentôsége abban
rejlik, hogy az egyébként egyszerû átalakítást bármely
számon (azaz byte-on) kétszer végrehajtva a kiindulási
értéket kapjuk vissza: például @K2 XOR 1 = 3; 3 XOR 1 =@N
@K2@N.
Ennek alapján a be- és kikódolást azonos ciklussal
oldhatták meg, ami hozzájárult a víruskód rövidségéhez.
Elsô látásra azt gondolhatnánk, hogy a vírustest a kódolás
ellenére mindig azonos lesz. Ennek elkerülésére iktatta be
a szerzô -- valószínûleg utólag -- az SI-t is a kódolásba.
Annak értéke attól függ, hogy VIRUSTEST hova esik a
fertôzött file-ban, azaz a fertôzés elôtt mekkora volt az
eredeti file mérete. îgy a lekódolt terület csak azonos
méretû file-okban lesz egyforma, tehát a lekódolt
területrôl szekvenciát választani nem lehet. Mivel a
Cascade e változata 1701 byte hosszú, s a kódolt terület
1666 byte-os, a 35 byte-os kódoló rész lehet csak megfelelô
a kereséshez, ami jelentôsen csökkenti a választékot egy
hagyományos vírushoz képest.
@VBad Boy@N
A Cascade-ben alkalmazott titkosító eljáráshoz hasonlót sok
vírusíró használt. Ezek általában csak bonyolultságukban
térnek el egymástól. Igazi újdonságot csak az a gazfickó
hozott, amit szerzôje már kifejezetten a mutálódás
illusztris példájának szánt, s Bad Boynak (Rossz Fiú)
nevezett el. Bár az irodalom közönséges vírusként említi a
Bad Boy mindkét verzióját, kódjuk 1000 byte-ba zsúfolt
zsonglôrködés. A vírus teste nyolc modulból áll, amit a ma
már birtokomban levô forráskódból kivágott megjegyzésekkel
is bemutatok (2. lista).
A Module 1 lényegében egy kódoló/dekódoló ciklus. Sokkal
érdekesebb a Module 2 szerepe, ami arra hivatott, hogy a
nyolc eltérô funkciójú eljárást különbözô sorrendben, az
eredetitôl eltérô offsetre másolja fel a memóriába, majd
rezidenssé tegye a kódot. îgy az eredeti modulsorrend
szinte csak az elsô fordítás után van meg, utána a vírust
elindítva elôáll például a Module 6, 4, 1, 3, 8, 7, 2, 5
alakzat a memóriában. Ezután a vírus lesi a DOS @KEXEC@N
funkcióját és azonnal megfertôz minden COM programot, amibe
""károkozás nélkül" belefér (a COM file-ok mérete nem
haladhatja meg a 64 Kbyte-ot, ha tehát a vírussal együtt
már ennél nagyobb méret adódna, nem fertôzi meg az adott
COM file-t). Mivel a mutálódás csak a memóriába kerüléskor
lehetséges, nincs biztosítva a generációváltás. Ezt a
problémát oldja meg a SPECIAL PROGRAM nevû modul, ami ügyel
arra, hogy minden tizedik fertôzés után megfagyjon a gép.
Ilyenkor a ""The bad boy halt your system ..." feliratot
írja ki két csipogás kíséretében.
Tehát valójában önmagát fékezi meg, adatkárokat nem okoz.
Ezzel a módszerrel tízes csoportokat hoz létre, amik a
plusz kódolás miatt még mindig eltérnek egymástól, bár a
""The Bad Boy virus, Copyright (C) 1991." szöveg kódolatlan
marad -- erre külön figyelmet fordított a szerzô.
Számoljunk utána: nyolc modul nyolc helyre az 8! (olvasd: 8
faktoriális), azaz 40|320 lehetséges variáció. Ez már
valódi mutálódás. Ezek mellett a vírus több olyan trükköt
használ, amivel képes kicselezni a legtöbb vírusvédelmet, s
legalább a fertôzésig eljut. Például a SYSTEM FILE TABLE-t
direktbe írja át, így nem kell írásra megnyitnia a COM
file-okat a DOS @KOpen file@N funkciójával, hiszen a
megfelelô helyre saját maga is bevésheti az írásra
nyitottság jelét.
@VTequila@N
A következô példa új és jelentôs változást hozott a mutáns
vírusokhoz képest. A vírust a benne található szöveg
alapján -- ami csak visszafejtés után olvasható --
Tequilának nevezték el (lásd külön keretes cikkben).
Ez a vírus sem okoz mûködése során közvetlenül
adatvesztést, de ha nem elég óvatosan debugolják,
elszabadulhat, s akkor nem sok minden marad épen a lemezen.
A Tequila terjedési módszere is olyan volt, amivel addig
nem nagyon találkozhattunk Magyarországon. A stealth
(lopakodó) technika tökéletes megvalósítását a boot- és
file-fertôzés ötvözetével éri el. A vírus az EXE file-okat
kedveli, a COM-ok hidegen hagyják. Ha elindítunk egy általa
megfertôzött EXE file-t, a vírus elsônek a partíciós
táblába és a merevlemez utolsó hat szektorába fészkeli be
magát. Egészen odáig nem történik semmi, amíg a gépet újra
nem indítjuk. Ha ezt megtesszük, az így aktívvá tett vírus
fertôzni kezd. A file-ok hossznövekedésébôl semmit sem
érzékelünk, mert a Tequila becsap bennünket, éppen úgy,
mint a 4096 vírus. A Töltögetôhöz hasonlóan az eredeti
partíciós táblát mutatja nekünk, ha éppen ott keresnénk.
Akkoriban jelent meg a McAfee féle Scan @K/AV@N kapcsolója,
ami tíz byte-ot ad hozzá minden ""immunizált" EXE és COM
file végéhez. Ebbôl hat byte azonosító, négy pedig CRC. A
Tequila vírus mielôtt fertôzne, ellenôrzi, hogy van-e ilyen
védelem a file-on, s ha igen, tönkreteszi az azonosítót,
így a SCAN nem veszi észre a változást. A vírus igazi
pikantériáját nem ezek a tulajdonságai adják. A Tequila a
polimorf (alakváltó) vírusok elsô elterjedt darabja, a
Mutation Engine-t használók elôdje.
De mitôl is nevezhetô egy vírus alakváltónak? Attól, hogy
minden byte-ja más lesz -- vagy más sorrendû -- az egymást
követô fertôzések során, ami lehetetlenné teszi a
hagyományos szekvenciális ellenôrzést. A Tequila vírust
szekvencia alapján keresô programok kivétel nélkül elmennek
a fertôzött file-ok mellett, hiszen leggyakrabban csak egy
külföldrôl beszerzett byte-sorozatot használnak. A
szekvencia, amit keresnek, önmagában még jó lehet, hiszen a
memóriában egy interruptra felláncolt -- amúgy kódolt --
vírus is rákényszerül arra, hogy kikódolja magát. îgy a
rezidens vírusok ellen használható maradhat a
szekvenciakeresés -- a memóriában.
A polimorf tulajdonságot a Tequila a következôképp
valósította meg: szintén kódolóciklust használ, mint a
Cascade és a Bad Boy, de azt is megváltoztatja minden
fertôzéskor, azaz lépésrôl lépésre újat ír. A ciklus
elkészítésének elsô fázisa az, hogy kijelölt területét (64
byte, mert ez az ide írt kód maximális mérete) az
óraszámláló pillanatnyi értékével tölti fel. Ezek után
elkezdi létrehozni a kikódolást végzô kódsorozatot. Ennek
során ügyel arra, hogy az utasítások sorrendje mindig más
legyen, így például NOP-szerû ""szemetet" szúr be közéjük.
A ""piszkoknak" persze kijelölt helyük van. Meghatározták,
hogy mi után következhetnek: több is egymás után kerülhet,
de az is elôfordulhat, hogy egy sem lesz. Minden döntési
helyzet eredményét véletlenszámok határozzák meg. îgy
például azt is, hogy az azonos szerepû részleteket melyik
módon írják le (4. lista).
A példában a kódszegmens értékét veszi fel az adatszegmens
két eltérô módon: Az @Ka,@N esetben a vermen, 2 byte-ban,
míg @Kb,@N-nél a BX regiszteren keresztül 4 byte-ban. A
@Kc,@N és @Kd,@N példánál már egy hosszabb részletet
láthatunk. A csillaggal megjelölt sorok a fent említett
kitöltô utasítások. Figyeljük meg, hogy a @Kc,@N-nél BX
majd SI kap értéket, @Kd,@N-ben SI után BX, azaz a
címzésnél felcseréli a regisztereket. Mivel a létrehozott
ciklus byte-jai szerepet kapnak a vírustest kódolásában
(például hozzáadódnak ahhoz), a polimorf jelleg
eredményesen valósulhat meg. Lényegében minden byte helyén
akármi is lehet a következô fertôzés bekövetkeztekor.
Megfelelô víruskeresô hiányában csak az idônként megjelenô
karakteres Mandelbrot rajz alapján kezdhetünk gyanakodni.
@VMutation Engine@N
Sajnos rengeteg megszállott vírusírója van a világnak.
Ilyen az a bolgár programozó is, aki Dark Avengernek (Sötét
Bosszúálló) nevezi magát. Ålneve elsô, világszerte ismert
vírusa nyomán ragadt rajta. Az ô keze alól került ki
például a V800 és a Nomenklatura is. Legutolsó munkája a
szintén nagy vihart kavart Dark Avenger MuTation Engine
(DAME, MTE), de ez már nemcsak saját fejlesztés eredménye.
A DAME dokumentációjában egyik helyen a Mad Maniac (ïrült
Mániákus) név is szerepel, s a szövegben sok a többesszám.
Például: ""We decided NOT to give up the Engine's source
code at this time." (ùgy döntöttünk, hogy most nem adjuk ki
az Engine forráskódját.)
A DAME valójában nagyon hasonlóan mûködik, mint a Tequila
alakváltoztató algoritmusa. Önmagában nem vírus, azaz nem
képes terjedésre. A Mutation Engine egy object modul, ami
egy normál vírushoz szerkeszthetô. Assemblyben írták, és a
Turbo Assembler 2.5-tel fordították le, eredményét MTE.OBJ
néven terjesztik a vírusírók között. Szerencsére -- ha a
DAME esetében lehet egyáltalán ilyesmirôl beszélni -- csak
olyanok képesek használatára, akik már gyakorlottak
Assemblyben. Erre a tényre dokumentációja is felhívja a
figyelmet: ""If you have never written a virus in
Assembler, DON'T start with the Engine." (Hogyha még soha
nem írtál vírust Assemblerben, akkor ne az Engine-nel
kezdd.)
A DAME arra a feladatra hivatott, hogy bármely vírust
felvértezzen alakváltoztató képességgel. Ezt úgy oldották
meg, hogy megfelelô paraméterezéssel -- a regisztereken
keresztül -- egy külsô szubrutinhívást kelljen csak
végrehajtani, úgy mint a Turbo Pascalban a Crt unit GotoXY
procedúráját. Az eredményes használat érdekében egy
DEMOVIR.ASM file is van a készletben, amiben részletesen
elmagyarázzák az Engine hívásának elôkészítését. A DAME
paraméterei között szerepel az is, hogy honnan és mennyit
kell kódolni a vírusból, mekkora legyen a kikódoló ciklus
mérete, hova kerüljön a már kódolt szakasz, mely
regiszterek értékét nem ronthatja el a hívás stb.
A DAME nagyon sok variációra képes. A kikódoló rutin mérete
fertôzésenként változik, így más és más lesz az Engine-t
használó vírus hossza. Megvalósításához az összes ismert
mutációs technikát alkalmazták. Beépített
véletlenszám-generátora van, de a rugalmasság érdekében
ehhez nem ragaszkodik, a vírusíró is készíthet ilyet. 4.
listánkban részletet láthatnak egy DAME fertôzés
kódolóciklusából. Érdemes megfigyelni, hogy az AX regiszter
értéke a szakasz végére visszanyeri eredeti tartalmát, a
rajta elvégzett mûveletek csak a kód változatosságát
segítik elô.
Mindezek ellenére a Mutation Engine is nagyon jól
detektálható, ami azért fontos, mert felismerésével az
összes MTE-et használó vírus lebuktatható. Ha egy vírus ma
MTE-t használ, az olyan, mintha táblát rakna magára:
""Fertôzô vagyok!". Ennek ellenére többen is ezt a
zsákutcát járják, így tucatnyi -- szerencsére könnyen
felismerhetô -- MTE alapú vírus van forgalomban.
Magyarországon még nem volt, s remélhetôleg nem is nagyon
lesz ilyen járvány, bár sokaknak meglehet az ilyen vírusok
kifejlesztéséhez szükséges modul. Ez azonban éppen olyan
értelmetlen idôtöltés, mint egy normál vírus megírása.
Az igazsághoz hozzátartozik, hogy az MTE típusú vírusokat
keresô programok elméletileg vaklármázhatnak, mivel nem
szokványos eljárást használnak a keresésre, hanem
közelítést. Például Fridrik Skulason, az F-Prot szerzôje
is felhívja a figyelmet arra, hogy ha az F-Prot Mutation
Engine-t jelezne egy file-ban, lehet, hogy téves a riasztás
(azonban egy ilyen esetnek sokkal kisebb az esélye, mint
egy szekvenciális keresô rosszul megválasztott byte-sorozat
miatti vaklármájának).
Senki nem tudja, hogy a polimorf vírusok megjelenése a
mutáns vírusok végállomását vagy egy új korszak kezdetét
jelenti-e. Sajnos az utóbbinak van nagyobb esélye, így
sokáig bosszantanak még minket a nem várt betolakodók.
@KSzôr Péter@N
@V1. lista: a Cascade vírus kikódoló ciklusa@N
...
CS:
TEST BYTE PTR [ELLENOR,01 ; kódolva van a vírustest?
JZ KODKEZDET ; NEM! Kikódolás nem kell.
; (fordítás utáni állapot)
LEA SI,[VIRUSTEST@N ; a kódolt terület kezdôcíme
MOV SP,0682 ; ciklusérték
SKIP:
XOR [SI,SI ; SI-vel és
XOR [SI@N,SP ; SP-vel is XOR-ol
INC SI ; (+1)
DEC SP ; (-1)
JNZ SKIP ; 1666-szor ismétli
VIRUSTEST:
...
@V2. lista: a Bad Boy forráskódjának kommentezése@N
; MODULE 1 - CODER/DECODER ------------------
; MODULE 2 - MUTATION TO MEMORY -------------
; MODULE 3 - SET INTERRUPT VECTORS ----------
; MODULE 4 - RESTORE OLD PROGRAM CODE & START
; MODULE 5 - SPECIAL PROGRAM ----------------
; MODULE 6 - INT 24 HEADER ------------------
; MODULE 7 - INT 21 HEADER ------------------
; MODULE 8 - INFECTING (bx - file handle) ---
@VA Tequila üzenetei:@N
@KWelcome to T.TEQUILA's latest production.@N
@K@N
@KContact T.TEQUILA/P.o.Box 543/6312 St'hausen/@N
@K@N
@KSwitzerland.@N
@K@N
@KLoving thoughts to L.I.N.D.A@N
@K@N
@KBEER and TEQUILA forever !@N
@V3. lista: példák a Tequila döntéseire@N
a, PUSH CS b, MOV BX,CS
POP DS MOV DS,BX
c, PUSH CS d, MOV BX,CS
* CMP SP,AX * CMP BL,CL
POP DS MOV DS,BX
* TEST SI,BP MOV SI,000A
MOV BX,000A * NOP
* CLD MOV BX,096A
MOV SI,096A * TEST DX,SP
@V4. lista: részlet egy DAME fertôzés@N
@Vkódolóciklusából@N
PUSH AX
MOV DI,D172
MOV CL,04
ROR DI,CL
SUB DI,871A
ADD DI,4E23
MOV SI,DI
MOV AX,31F7
MOV CL,07
ROL AX,CL
MOV AX,CAB9
XOR AX,03BB
IMUL DI
ADD AX,SI
ADD AX,C733
POP AX
@VHelyreigazítás@N
Magazinunk májusi számának vírusrovatában a nyomda ördöge
alaposan megkevert pár adatot. A szedésnél sajnálatos módon
felcserélték a mûszaki táblázatban a programok
fejlesztôinek nevét: a PC-Scan 1.06.556 fejlesztése
ugyanis Bakos Imre (Kobak Kft.) és dr. Szegedi Imre
nevéhez fûzôdik; Virkill 1.20 [031 készítôje Rudnai Tamás.
Még egy elírás történt a sebességteszt második
táblázatában. Ez -- mea culpa -- az én bûnöm. A pótlólag
elvégzett második teszt helyes értékei: Virkill -- 1.01
perc, PC-Scan -- 5:30 perc. A hibákért ezúton kérünk
elnézést az olvasóktól és a fejlesztôktôl.
@KNagy Gábor@N